type
Post
status
Published
date
Nov 16, 2022
slug
Interested in Taichi
summary
Interested in Taichi
tags
Taichi
LLVM
category
技术分享
icon
password
贡献指南
测试
代码风格
安装指南
taichi LLVM
论文介绍
The taichi
from EECS-2022-112.pdf (berkeley.edu) 2.3
JIT编译流水线
Python AST → Taichi AST
Chi-IR 结合 Taichi compiler 将Front-end AST自动并行,并转换为intermediate representation(IR)。Taichi compiler执行了主要的优化工作
优化后的Chi-IR发送给 Taichi backend,backend编译到GPU kernel,Backend APIs即为CUDA、CPU、OpenGL
AOT
部分工业软件平台JIT pipline开销过大
Engineering Challenges
Taichi的后端逐渐增多,而这些后端都是独立维护的,导致Taichi在使用不同后端时需要考虑不同的功能支持,这和Taichi的初衷背道而驰
本repo主要工作贡献
- 通过GPU抽象层,使用SPIR-V codegen
- Taichi CGraph AOT 预编译
Unified Device API
需要多游戏引擎和渲染中间件通常都使用一个抽象层,称为Render Hardeware Interface RHI,这里从用类似的方法,创建RHI 中间件 Unified Device API
设计阶段
作者首先survey了常用的backend API,找出他们间的共性,区别以适配这些后端。
Work-submission Model
主要有两种任务提交模型,immediate and batched
immediate在实际执行时可能也被API转换为batched以进行一些优化
batched:API提供 stream 和 command list 执行一个指令串,具有更少的overhead和更好的transparency,通常在较新的API使用
Resource Model
API tracked:API对硬件资源的分配可能时lazy的,API需要保证硬件资源是可用的
User Controlled:explicit model允许高级的资源管理技巧
Unifuied Device API设计细节

Device object代表实际backend API提供的硬件设备,所有的资源allocate目标
Allocation 分配资源的call
Stream object:每个stream中的指令有序执行,但是不一定按顺序完成,因此需要保证stream的顺序
StreamSemaphore:barrier
3.1.3 设计依据
- code-gen 和 runtime的isolation
- batched execution 和 graph based execution更容易优化


- explicit memory management
- optional features
3.1.4 Implementation
基于Vulkan API,并且Vulkan的特性比较丰富
Valkan需要手动track resource的usage
由于代码在host端运行,track GPU resource life-time 比较困难,由于command batches的执行方式,确保资源在batch中使用,结束batch则释放
但是这种方式比较占用memory
3.2 SPIR-V codegen
portability
Single Static Assignment fron IR:transform Chi-IR to SPIR-V
efficency
3.2.2 Implementation
Chi-IR → SPIR-V statements